package ar.com.tallerdos.smartdinner.business;

import java.util.List;

import ar.com.tallerdos.smartdinner.dao.PedidoDao;
import ar.com.tallerdos.smartdinner.model.Comida;
import ar.com.tallerdos.smartdinner.model.Pedido;
import ar.com.tallerdos.smartdinner.sync.PedidosSincronizador;

public class PedidoBusiness {
    
    private static PedidoDao dao;
    
    public static Pedido findById(Integer id) {
	return getDao().findById(id);
    }
    
    public static List<Pedido> findAll() {
	return getDao().findAll();
    }
    
    public static void create(Pedido entity) {
	setHoraUltimaActualizacion(entity);
	getDao().create(entity);
    }
    
    public static Boolean delete(Pedido entity) {
	if (entity.getComida() != null) {
	    Comida comida = ComidaBusiness.findById(entity.getComida().getId());
	    comida.getPedidos().remove(entity);
	}	
	return getDao().delete(entity);
    }
    
    public static Boolean update(Pedido entity) {
	Boolean returnValue = getDao().update(entity);
	if (returnValue) {
	    setHoraUltimaActualizacion(entity);
	}
	return returnValue;
    }
    
    private static void setHoraUltimaActualizacion(Pedido entity) {
	if (entity.getFechaMod() != null && 
		PedidosSincronizador.ultimaActualizacion.before(entity.getFechaMod())) {
	    PedidosSincronizador.ultimaActualizacion = entity.getFechaMod();
	}
    }
    
    public static Boolean createOrUpdate(Pedido entity) {
	setHoraUltimaActualizacion(entity);
	return getDao().createOrUpdate(entity);
    }
    
    public static Pedido findPedidoByCodigo(Integer codigo) {
	for (Pedido pedido : findAll()) {
	    if (pedido.getCodigo().equals(codigo)) {
		return pedido;
	    }
	}
	
	return null;
    }

    public static PedidoDao getDao() {
	if (dao == null) {
	    dao = new PedidoDao();
	}
        return dao;
    }

    public static void setDao(PedidoDao dao) {
        PedidoBusiness.dao = dao;
    }
}
